/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import clases.Almacen;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/**
 *
 * @author Edder
 */
public class MdlAlmacen implements Modelo<Almacen>{

    /**
     *
     * @param almacen
     * @param cnx
     * @throws SQLException
     */
    @Override
    public void insert(Almacen almacen, Conexion cnx) throws SQLException{
        String sql = "INSERT INTO Almacen(nombre, estado) "
                + "VALUES('" + almacen.getNombre() + "', '" + almacen.getEstado() + "');";
        cnx.ejecutar(sql);        
    }
    
    /**
     *
     * @param cnx
     * @return
     * @throws SQLException
     */
    @Override
    public int getLastId(Conexion cnx) throws SQLException{
        String sql = "SELECT idAlmacen FROM almacen ORDER BY idAlmacen DESC LIMIT 1";
        ResultSet rs = cnx.consultar(sql);
        if(rs.next()){
            return rs.getInt(1);
        }
        return -1;
    }
    
    /**
     *
     * @param almacen
     * @param cnx
     * @throws SQLException
     */
    @Override
    public void update(Almacen almacen, Conexion cnx) throws SQLException{
        String sql = "UPDATE almacen SET "
                + "nombre = '" + almacen.getNombre() + "', "
                + "estado = '" + almacen.getEstado() + "' "
                + "WHERE idAlmacen = " + almacen.getIdAlmacen();
        cnx.ejecutar(sql);
    }
    
    public void dar_baja(Almacen almacen, Conexion cnx) throws SQLException{
        String sql = "UPDATE almacen SET "
                + "estado = 'I' "
                + "WHERE idAlmacen = " + almacen.getIdAlmacen();
        cnx.ejecutar(sql);
    }
    
    /**
     *
     * @param query
     * @param cnx
     * @return
     * @throws SQLException
     */
    public ArrayList<Almacen> getAlmacenes(String query, Conexion cnx) throws SQLException{
        String sql = "SELECT * FROM almacen WHERE nombre LIKE '%" + query + "%' "
                + "ORDER BY nombre;";
        return get(sql, cnx);
    }
    
    /**
     *
     * @param query
     * @param estado
     * @param cnx
     * @return
     * @throws SQLException
     */
    public ArrayList<Almacen> getAlmacenes_estado(String query, char estado, Conexion cnx) throws SQLException{
        String sql = "SELECT * FROM almacen WHERE nombre LIKE '%" + query + "%' "
                + "AND estado LIKE '" + estado + "' ORDER BY nombre;";
        return get(sql, cnx);
    }
    
    /**
     * Este metodo consulta un Almacen segun su ID
     * @param idAlmacen Este es un entero con el id del almacen
     * @param cnx Esta es la conexion que se usa para la consulta
     * @return Un objeto de Almacen
     * @throws SQLException 
     */
    @Override
    public Almacen get(int idAlmacen, Conexion cnx) throws SQLException{
        String sql = "SELECT * FROM almacen WHERE idAlmacen = " + idAlmacen;
        ResultSet rs = cnx.consultar(sql);
        Almacen almacen = null;
        
        if(rs.next()){
            almacen = new Almacen(rs.getInt(1), rs.getString(2), rs.getString(3).charAt(0));
        }
        return almacen;
    }
    
    @Override
    public ArrayList<Almacen> get(String sql, Conexion cnx) throws SQLException{
        ResultSet rs = cnx.consultar(sql);
        ArrayList<Almacen> almacenes = new ArrayList<>();
        
        while(rs.next()){
            Almacen almacen = new Almacen(rs.getInt("idAlmacen"),
                    rs.getString("nombre"),
                    rs.getString("estado").charAt(0));
            almacenes.add(almacen);
        }
        return almacenes;
    }
}
